package com.hjxr.quota.datasource.service;

import com.hjxr.quota.datasource.domain.JobDatasource;
import com.hjxr.quota.tool.database.ColumnInfo;

import java.io.IOException;
import java.util.List;

/**
 * 数据库查询服务
 *
 * @author zhouhongfa@gz-yibo.com
 * @ClassName JdbcDatasourceQueryService
 * @Version 1.0
 * @since 2019/7/31 20:50
 */
public interface DatasourceQueryService {

    /**
     * 获取db列表
     * @param id
     * @return
     */
    List<String> getDBs(Integer id) throws IOException;

    /**
     * 根据数据源表id查询出可用的表
     *
     * @param id
     * @return
     */
    List<String> getTables(Integer id) throws IOException;

    /**
     * 获取CollectionNames
     * @param dbName
     * @return
     */
    List<String> getCollectionNames(Integer id, String dbName) throws IOException;

    /**
     * 根据数据源id，表名查询出该表所有字段
     *
     * @param id
     * @return
     */
    List<String> getColumns(Integer id, String tableName) throws IOException;

    /**
     * 根据 sql 语句获取字段
     *
     * @param datasourceId
     * @param querySql
     * @return
     */
    List<String> getColumnsByQuerySql(Integer datasourceId, String querySql);

    /**
     * 根据数据源泉id, 表名查询出该表所有的字段信息
     * @param datasourceId 数据源id
     * @param tableName 表名
     * @return  List<ColumnInfo>
     * @throws IOException
     */
    List<ColumnInfo> getFullColumns(Integer datasourceId, String tableName) throws IOException;

    /**
     * 查询所有数据源
     * @return
     */
    List<JobDatasource> getDatasource();

    /**
     * 根据字段别名标识获取字段所有的distinct value
     * @param datasourceId 数据源id
     * @param tableName 表名
     * @param columnName 字段名
     * @return
     */
    public List<String> getDistinctColumnValue(Integer datasourceId, String tableName, String columnName);


}
